#ifndef SALES_DATA_H
#define SALES_DATA_H

#include <string>
#include <iostream>

using namespace std;

class Sales_data
{
    friend Sales_data add(const Sales_data &lhs, const Sales_data &rhs);
    friend std::istream &read(std::istream &is, Sales_data &item);
    friend std::ostream &print(std::ostream &os, const Sales_data &item);
//  数据成员
private:
    std::string bookNo;
    unsigned units_sold = 0;    // 书籍编号，隐式初始化为空串
    double selling_price = 0.0; // 销售量，显式初始化为 0
    double sale_price = 0.0;    // 原始价格，显式初始化为 0
    double discount = 0.0;      // 折扣，显式初始化为 0
//  构造函数
public:
    // 非委托构造函数
    Sales_data(const string &book, unsigned num, double sellp, doule salep)
        : bookNo(book), units_sold(num), selling_price(sellp),
          sale_price(salep) {
        if (selling_price) {
            discount = sale_price / selling_price;
        }
        cout << "该构造函数接受书号、销售量、原价、实际售价四个信息." << endl;
    }
    // 委托构造函数
    Sales_data() : Sales_data("", 0, 0) {
        cout << "该构造函数无须接受任何信息." << endl;
    }
    Sales_data(const string &book) : Sales_data(book, 0, 0) {
        cout << "该构造函数接受书号信息." << endl;
    }
    Sales_data(std::istream &is) : Sales_data() {
        read(is, *this);
        cout << "该构造函数接受用户输入的信息." << endl;
    }

//  接口函数
public:
    std::string isbn() const { return bookNo; }  // 返回 ISBN
    Sales_data& combine(const Sales_data &rhs);
};

//  非类成员的函数
Sales_data add(const Sales_data &lhs, const Sales_data &rhs);
std::istream& read(std::istream &is, Sales_data &item);
std::ostream& print(std::ostream &os, const Sales_data &item);

#endif // SALES_DATA_H
